package com.cnaaa.pay.vo.wechat;

import com.cnaaa.pay.util.JAXBXmlUtil;
import lombok.Data;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 2018/10/31 Create by 郭文梁
 * WechatPlaceOrderVo
 * 微信统一下单参数（目标为XML）
 *
 * @author 郭文梁
 * @date 2018/10/31
 */
@SuppressWarnings("all")
@Data
@XmlRootElement(name = "xml")
public class WechatPlaceOrderVo {
    /**
     * 场景信息描述
     */
    @Data
    public static class Scene {
        /**
         * 门店ID
         */
        private String id;
        /**
         * 门店名称
         */
        private String name;
        /**
         * 门店行政区划码
         */
        private String area_code;
        /**
         * 门店地址
         */
        private String address;
    }

    /**
     * 公众账号ID  必填
     */
    private String appid;
    /**
     * 商户号 必填
     */
    private String mch_id;
    /**
     * 设备号  非必填
     */
    private String device_info;
    /**
     * 穗子字符串 必填
     */
    private String nonce_str;
    /**
     * 签名  必填
     */
    private String sign;
    /**
     * 签名类型 非必填
     */
    private String sign_type;
    /**
     * 商品描述 必填
     */
    private String body;
    /**
     * 商品详情 非必填
     */
    private String detail;
    /**
     * 附加数据 非必填
     */
    private String attach;
    /**
     * 商户订单号 必填
     */
    private String out_trade_no;
    /**
     * 标价币种 非必填
     */
    private String fee_type;
    /**
     * 金额 必填
     */
    private String total_fee;
    /**
     * 终端IP 必填
     */
    private String spbill_create_ip;
    /**
     * 交易起始时间  非必填
     */
    private String time_start;
    /**
     * 交易结束时间 非必填
     */
    private String time_expire;
    /**
     * 订单优惠标记 非必填
     */
    private String goods_tag;
    /**
     * 通知地址 必填
     */
    private String notify_url;
    /**
     * 交易类型 必填
     */
    private String trade_type;
    /**
     * 商品ID 非必填
     */
    private String product_id;
    /**
     * 指定支付方式 非必填
     */
    private String limit_pay;
    /**
     * 用户标识 必填
     */
    private String openid;
    /**
     * 场景信息 非必填
     */
    private Scene scene_info;

    /**
     * 转换为XML
     *
     * @return XML字符串
     */
    public String toXmL() {
        return JAXBXmlUtil.toXML(this);
    }
}
